package epoch.game.core.util;

import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;

/**
 * 枚举工具
 * 
 * @author will
 * @date 2015年6月15日 下午4:01:39
 */
public class EnumUtil {
	
	/**
	 * 为枚举建立索引
	 * 
	 * @param enums
	 * @param fieldName
	 * @param keyClass
	 * @return
	 * @throws Exception
	 */
	public static <K, E> Map<K, E> toMap(E[] enums, String fieldName, Class<K> keyClass) {
        Map<K, E> map = new HashMap<K, E>();
        if (enums.length <= 0) {
            return map;
        }
        try {
            Field field = enums[0].getClass().getDeclaredField(fieldName);
            boolean accessible = true;
            if(!field.isAccessible()){
            	accessible = false;
                field.setAccessible(true);
            }
            for (E va : enums) {
                @SuppressWarnings("unchecked")
				K key = (K) field.get(va);
                map.put(key, va);
            }
            if(!accessible){
            	field.setAccessible(false);
            }
        } catch (IllegalAccessException | NoSuchFieldException e) {
            throw new RuntimeException(e);
        } 
        return map;
    }
}
